package javase2.day06.demo10;
/*
等待与唤醒案例：顾客买包子和老板卖包子（线程之间的通信）
    顾客线程：告知老板要的包子和数量后，调用wait方法，放弃CPU执行权，进入WAITING状态（无限等待）
    老板线程：得知顾客要求后，开始工作，完成后调用notify方法，唤醒顾客吃包子
        注意：
            1.两个线程必须使用同步代码块，保证只能有一个线程在执行
            2.同步使用得到锁对象必须唯一
            3.只有锁对象才能调用wait和notify

     Object类中的方法：wait()和notify)()
 */
public class Demo01WaitAndNotify {
    public static void main(String[] args) {
        //锁对象必须唯一
        Object obj=new Object();

        //顾客线程
        new Thread(){
            @Override
            public void run() {
                while (true){
                    //同步代码块
                    synchronized (obj){
                        System.out.println("老板来两个韭菜包子");
                        //调用wait方法，放弃CPU执行权，进入WAITING状态（无限等待）
                        try {
                            obj.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        //唤醒后代码
                        System.out.println("老板，给你两元钱");
                        System.out.println("---------------------");
                    }
                }

            }
        }.start();

        //老板线程
        new Thread(){
            @Override
            public void run() {
                while (true){
                    //花费2秒做包子sleep
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //同步代码块
                    synchronized (obj){
                        System.out.println("老板花费5秒做好了包子，交给顾客吃");
                        //调用notify方法，唤醒顾客吃包子
                        obj.notify();
                    }
                }
            }
        }.start();
/*
老板来两个韭菜包子
老板花费5秒做好了包子，交给顾客吃
老板，给你两元钱
---------------------
老板来两个韭菜包子
老板花费5秒做好了包子，交给顾客吃
老板，给你两元钱
---------------------
老板来两个韭菜包子
老板花费5秒做好了包子，交给顾客吃
老板，给你两元钱
---------------------
老板来两个韭菜包子......
 */
    }
}
